Skip to content

perf(loki.source.file): Reduce allocations during file reading [backport]#5416

Merged
kalleep merged 1 commit intorelease/v1.13from
backport/pr-5405-to-v1.13
Feb 2, 2026
Merged

perf(loki.source.file): Reduce allocations during file reading [backport]#5416
kalleep merged 1 commit intorelease/v1.13from
backport/pr-5405-to-v1.13

Conversation

@grafana-alloybot
Copy link
Contributor

Backport of #5405

This PR backports #5405 to release/v1.13.

Original PR Author

@kalleep

Description

Pull Request Details

There is a lot of allocations being performed while reading files. I can clearly see this being a hot spot in our internal clusters.

Two of the biggest issues are:

  1. We allocate a new pending buffer as soon as we have completed a line
  2. We use ReadBytes api causing new allocation for every call that we just move to pending

Instead we can use ReadSlice, this api will not allocate but return a slice pointing to the internal buffer while still advancing read position. We copy it into pending so this is fine and we remove the intermediate allocation done by ReadBytes.

We can also reset length of pending and this buffer. This is fine because we never read past newline boundary.

Issue(s) fixed by this Pull Request

Notes to the Reviewer

PR Checklist

  • Documentation added
  • Tests updated
  • Config converters updated

This backport was created automatically.

### Pull Request Details
There is a lot of allocations being performed while reading files. I can
clearly see this being a hot spot in our internal clusters.

Two of the biggest issues are:
1. We allocate a new pending buffer as soon as we have completed a line
2. We use ReadBytes api causing new allocation for every call that we
just move to pending

Instead we can use `ReadSlice`, this api will not allocate but return a
slice pointing to the internal buffer while still advancing read
position. We copy it into pending so this is fine and we remove the
intermediate allocation done by `ReadBytes`.

We can also reset length of `pending` and this buffer. This is fine
because we never read past newline boundary.

### Issue(s) fixed by this Pull Request

<!-- Fixes #issue_id -->

### Notes to the Reviewer

<!-- Add any relevant notes for the reviewers and testers of this PR.
-->

### PR Checklist

<!-- Remove items that do not apply. For completed items, change [ ] to
[x]. -->

- [ ] Documentation added
- [x] Tests updated
- [ ] Config converters updated

(cherry picked from commit 899467a)
@grafana-alloybot grafana-alloybot bot requested a review from a team as a code owner February 2, 2026 12:00
@kalleep kalleep enabled auto-merge (squash) February 2, 2026 12:00
@kalleep kalleep merged commit eca2294 into release/v1.13 Feb 2, 2026
43 checks passed
@kalleep kalleep deleted the backport/pr-5405-to-v1.13 branch February 2, 2026 12:18
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 17, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant